$.fn.dataTableExt.oPagination.extStyle = {
    "fnInit": function (oSettings, nPaging, fnCallbackDraw) {
        nFirst = $('<span />', { 'class': 'paginate_button first' });
        nPrevious = $('<span />', { 'class': 'paginate_button previous' });
        nNext = $('<span />', { 'class': 'paginate_button next' });
        nLast = $('<span />', { 'class': 'paginate_button last' });
        nPageTxt = $("<span />", { text: 'Page' });
        nPageNumBox = $('<input />', { type: 'text', val: 1, 'class': 'pageinate_input_box' });
        nPageOf = $('<span />', { text: 'of' });
        nTotalPages = $('<span />', { text: parseInt(oSettings.aoData.length / oSettings._iDisplayLength, 10) });
  
        $(nPaging)
            .append(nFirst)
            .append(nPrevious)
            .append(nPageTxt)
            .append(nPageNumBox)
            .append(nPageOf)
            .append(nTotalPages)
            .append(nNext)
            .append(nLast);
  
        nFirst.click(function () {
            oSettings.oApi._fnPageChange(oSettings, "first");
            fnCallbackDraw(oSettings);
            nPageNumBox.val(parseInt(oSettings._iDisplayEnd / oSettings._iDisplayLength, 10));
        }).bind('selectstart', function () { return false; });
  
        nPrevious.click(function () {
            oSettings.oApi._fnPageChange(oSettings, "previous");
            fnCallbackDraw(oSettings);
            nPageNumBox.val(parseInt(oSettings._iDisplayEnd / oSettings._iDisplayLength, 10));
        }).bind('selectstart', function () { return false; });
  
        nNext.click(function () {
            oSettings.oApi._fnPageChange(oSettings, "next");
            fnCallbackDraw(oSettings);
           nPageNumBox.val(parseInt(oSettings._iDisplayEnd / oSettings._iDisplayLength, 10));
        }).bind('selectstart', function () { return false; });
  
        nLast.click(function () {
            oSettings.oApi._fnPageChange(oSettings, "last");
            fnCallbackDraw(oSettings);
            nPageNumBox.val(parseInt(oSettings._iDisplayEnd / oSettings._iDisplayLength,10 ));
        }).bind('selectstart', function () { return false; });
  
        nPageNumBox.focus(function () {
            $(this).attr("style", "border-color: #D0B39A");
        }).blur(function () {
            $(this).attr("style", "border-color: #C9C9C9");
        }).change(function () {
            var pageValue = parseInt($(this).val(), 10);
            if ((pageValue !== NaN) && pageValue > 0 && pageValue < oSettings.aoData.length) {
                oSettings._iDisplayStart = $(this).val();
                fnCallbackDraw(oSettings);
            }
        });
  
    },
  
  
    "fnUpdate": function (oSettings, fnCallbackDraw) {
        if (!oSettings.aanFeatures.p) {
            return;
        }
  
        /* Loop over each instance of the pager */
        var an = oSettings.aanFeatures.p;
        for (var i = 0, iLen = an.length; i < iLen; i++) {
            //var buttons = an[i].getElementsByTagName('span');
            var buttons = $(an[i]).find('span.paginate_button');
            if (oSettings._iDisplayStart === 0) {
                buttons.eq(0).attr("class", "paginate_disabled_first paginate_button");
                buttons.eq(1).attr("class", "paginate_disabled_previous paginate_button");
            }
            else {
                buttons.eq(0).attr("class", "paginate_enabled_first paginate_button");
                buttons.eq(1).attr("class", "paginate_enabled_previous paginate_button");
            }
  
            if (oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay()) {
                buttons.eq(2).attr("class", "paginate_disabled_next paginate_button");
                buttons.eq(3).attr("class", "paginate_disabled_last paginate_button");
            }
            else {
                buttons.eq(2).attr("class", "paginate_enabled_next paginate_button");
                buttons.eq(3).attr("class", "paginate_enabled_last paginate_button");
            }
        }
    }
};